/**
 * @param {number} numCourses
 * @param {number[][]} prerequisites
 * @return {boolean}
 */
 var canFinish = function(numCourses, prerequisites) {
    var links=new Array(numCourses).fill(0).map((i) => new Array());
    var visited=new Array(numCourses).fill(0);
    for(let [b,f] of prerequisites){
        //console.log(b,f);
        links[b].push(f);
        visited[f]++;
    }
    let stack=new Array();
    for(let i=0;i<numCourses;i++){
        if(visited[i]==0){
            stack.push(i);
        }
    }
    let count=0;
    while(stack.length!=0){
        let now=stack.pop();
        count++;
        for(let to of links[now]){
            visited[to]-=1;
            if(visited[to]==0){
                stack.push(to);
            }
        }
    }
    if(count<numCourses){
        return false;
    }
    return true;
}
console.log(canFinish(4,[[2,0],[1,0],[3,1],[3,2],[1,3]]));


// 执行用时：
// 104 ms
// , 在所有 JavaScript 提交中击败了
// 62.50%
// 的用户
// 内存消耗：
// 43.5 MB
// , 在所有 JavaScript 提交中击败了
// 19.20%
// 的用户